package com.inviteOrder.strategy;

import com.inviteOrder.dao.User;
import com.inviteOrder.domain.Reward;
import com.inviteOrder.domain.RewardEnum;

import java.math.BigDecimal;

/**
 * 新用户返奖策略
 *
 * @author 大忽悠
 * @create 2022/10/17 10:18
 */
public class NewUserRewardStrategy implements RewardStrategy {
    /**
     * 新用户普通奖励为10元
     */
    private final BigDecimal COMMON_REWARD = BigDecimal.valueOf(10);

    /**
     * 针对新用户的返奖策略
     *
     * @param uid 用户id
     * @return 返回返奖金额
     */
    @Override
    public Reward reward(Long uid) {
        Integer inviteNum = User.getInviteNum(uid);
        BigDecimal gradientAward = calculateGradientAward(inviteNum);
        return Reward.builder().amount(gradientAward.add(COMMON_REWARD))
                .id(System.currentTimeMillis())
                .type(RewardEnum.Money)
                .build();
    }

    /**
     * 计算梯度奖
     *
     * @param inviteNum
     * @return 默认拉几个人就返现多少---这里其实也可以再次使用策略模式
     */
    private BigDecimal calculateGradientAward(Integer inviteNum) {
        return BigDecimal.valueOf(inviteNum);
    }
}
